/**
 * 描述: jwt-token验证和解析函数
 * 作者: kq
 * 日期: 2022-11-15
 */

const jwt = require("jsonwebtoken"); // 引入验证jsonwebtoken模块
const expressJwt = require("express-jwt"); // 引入express-jwt模块
const { PRIVATE_KEY } = require("./constant"); // 引入自定义的jwt密钥

// 验证token是否过期
const jwtAuth = expressJwt({
  // 设置密钥
  secret: PRIVATE_KEY,
  // 设置为true表示校验，false表示不校验
  // credentialsRequired: false,
  // // 自定义获取token的函数
  // getToken: (req) => {
  //   if (req.headers.authorization) {
  //     return req.headers.authorization
  //   } else if (req.query && req.query.token) {
  //     return req.query.token
  //   }
  // }
  // 设置jwt认证白名单，比如/api/不需要拦截
}).unless({
  path: [/^\/api\//],
});

// jwt-token解析
function decode(req) {
  let token = req.get("Authorization");
  if (token.indexOf("Bearer") >= 0) {
    token = token.replace("Bearer ", "");
  }
  return jwt.verify(token, PRIVATE_KEY);
}

module.exports = {
  jwtAuth,
  decode,
};
